home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #2 / Amiga Plus CD - 1995 - No. 2.iso / pd / mui / gravisimu / arexx / planetensystem_einh.rexx < prev    next >
OS/2 REXX Batch file  |  1995-04-11  |  3KB  |  123 lines

  1. /* Planetensystem_einh.rexx
  2.  *
  3.  * Autor: Thies Wellpott
  4.  * Version: 1.1 (2.7.94)
  5.  *
  6.  * Erstellt ein Planetensystem mit elliptischen Umlaufbahnen. Einzugeben
  7.  * ist der Name und die Masse des Sterns, sowie für jeden Planeten der Name,
  8.  * die Masse, die große Halbachse der Ellipse, die numerische Exzentrizität
  9.  * und die mittlere Umlaufgeschwindigkeit
  10.  *
  11.  * benötigt rexxmathlib.library
  12.  */
  13.  
  14. G = 6.67259e-11         /* Gravitationskonstante */
  15. PI = 3.1415927
  16.  
  17. Call Addlib("rexxmathlib.library",0,-30,0)
  18.  
  19. IF ~Show("P", "GRAVISIMU.1") THEN
  20. DO
  21.    Say "GraviSimu ist nicht gestartet!"
  22.    Exit
  23. END
  24.  
  25. Address "GRAVISIMU.1"
  26. Options Results
  27.  
  28. 'GetNumObjects'
  29. IF Result > 0 THEN
  30.    Say "Achtung! Die existierenden Objekte können stören!"
  31.  
  32.  
  33. Options Prompt ">> "
  34.  
  35. Say "Name des Sterns"
  36. Parse Pull name
  37. Say "Masse des Sterns (Kommazahl Leerzeichen Masseneinheitsabkürzung)"
  38. Parse Pull m m_einh
  39. 'GetUnitKG' m_einh
  40. IF RC ~= 0 THEN
  41. DO
  42.    Say "*** Ungültige Masseneinheit!"
  43.    Exit
  44. END
  45.  
  46.  
  47. 'NewObject "'name'"' m m_einh '0 0 m 0 0 m/s 1 1 0 1'
  48. IF RC ~= 0 THEN
  49. DO
  50.    Say '*** Konnte das Objekt "'name'" nicht anfügen!'
  51.    Exit
  52. END /* IF */
  53.  
  54. min_T = 1e35
  55. max_a = 0
  56.  
  57. DO i=1 UNTIL name = ""
  58.    Say
  59.    Say i". Planetenname (eine leere Eingabe beendet das Skript)"
  60.    Parse Pull name
  61.    IF name ~= "" THEN
  62.    DO
  63.       Say "   Planetenmasse (Kommazahl Leerzeichen Masseneinheitsabkürzung)"
  64.       Parse Pull m m_einh
  65.       'GetUnitKG' m_einh
  66.       IF RC ~= 0 THEN
  67.       DO
  68.          Say "*** Ungültige Masseneinheit!"
  69.          Exit
  70.       END
  71.       m_kg = m * Result
  72.  
  73.       Say "Daten der elliptischen Umlaufbahn"
  74.       Say "   große Halbachse (Kommazahl Leerzeichen Streckeneinheitsabkürzung)"
  75.       Parse Pull a a_einh
  76.       'GetUnitM' a_einh
  77.       IF RC ~= 0 THEN
  78.       DO
  79.          Say "*** Ungültige Streckeneinheit!"
  80.          Exit
  81.       END
  82.       a_m = a * Result
  83.  
  84.       Say "   numerische Exzentrizität (zwischen 0.0 und 1.0)"
  85.       Parse Pull epsilon
  86.       Say "   mittlere Umlaufgeschwindigkeit in km/s"
  87.       Parse Pull vm
  88.       vm_ms = vm*1000
  89.  
  90.       b = a * Sqrt(1 - epsilon*epsilon)
  91.       x = epsilon*a
  92.       y = -b
  93.       vx = vm
  94.       vy = 0
  95.  
  96.       T = 2*PI * a_m / vm_ms     /* ungefähre Umlaufzeit in s */
  97.       IF T < min_T THEN
  98.          min_T = T
  99.       IF a_m > max_a THEN
  100.          max_a = a_m
  101.  
  102.       'NewObject "'name'"' m m_einh x y a_einh vx vy 'km/s 1 0 1 1'
  103.       IF RC ~= 0 THEN
  104.          Say "*** Konnte Planeten nicht anfügen!"
  105.    END /* IF */
  106. END /* DO UNTIL */
  107.  
  108. IF max_a = 0 THEN
  109.    Say "*** Kein Planet eingegeben!"
  110. ELSE DO
  111.    'GetWindowSize'
  112.    Parse Var Result sx sy
  113.    'GetUnitM AE'
  114.    'SetScale' 2*max_a/Result/(Min(sx,sy)/2.25) 'AE'
  115.    'GetUnitS d'
  116.    'SetTime' min_T/Result/200 'd'
  117.    'SetParameter T=1 N=1'
  118.    'SetOptions M=0'
  119. END
  120.  
  121. Exit
  122.  
  123.